package cn.itcast.controller;

import cn.itcast.pojo.Dept;
import cn.itcast.pojo.Result;
import cn.itcast.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;




/*
    如何接受前端给的参数:
        当前端的参数为:   键=值&键=值.......
            第一种方式:
                我们拿到tomcat帮我们封装的请求对象, 然后通过getParameter自己通过键获取对应的值
            第二种方式:
                当我们接口中的参数的名字和前端的键名不一致的时候, 我们可以采用
                @RequestParam("前端的键名")  接收参数
            第三种方式:
                你必须保证你的的参数的名字和前端的键的名字保持一致,能够自动帮你做
                当前端没有给改参数赋值可以通过@RequestParam(defaultValue=默认值)


 */

@RestController
@RequestMapping("/depts")
@Slf4j
//跨域访问
@CrossOrigin(origins = "*")
public class DeptController {
    //1.接收数据
    //2.封装数据
    //3.调用service层处理数据
    @Autowired
    private DeptService deptService;

    /**
     * 查询所有部门
     *
     * @return 返回封装后的结果
     */
    @GetMapping
    public Result findAll() {

        /*if (true) {
             new IOException("你的fingAll方法出现了Io流异常了");
        }*/
        List<Dept> list = deptService.list();
        //4.返回数据
        return Result.success("查询成功", list);
    }

    /**
     * 根据id删除部门
     *
     * @param id 部门的id
     * @return 返回封装后的结果
     */
    @DeleteMapping
    public Result deleteById(@RequestParam("id") Integer id) {

        /*if (true) {
            throw new IndexOutOfBoundsException("你的deleteById方法出现了Io流异常了");
        }*/
        boolean flag = deptService.removeById(id);

        return flag == true ? Result.success("删除成功") : Result.error("删除失败");
    }

    /**
     * 修改部门的第一步  先查到部门信息
     *
     * @param id 部门的id
     */
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id) {
        /*if (true) {
            throw new NullPointerException("你的findById方法出现了Io流异常了");
        }*/
        Dept byId = deptService.getById(id);
        return byId != null ? Result.success("查询成功", byId) : Result.error("查询失败");

    }

    @PutMapping
    public Result updateById(@RequestBody Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
        boolean flag = deptService.updateById(dept);
        return flag == true ? Result.success("修改成功") : Result.error("修改失败");
    }

    /**
     * 添加部门
     *
     * @param dept 部门名字
     * @return 返回封装后的结果
     */
    @PostMapping
    public Result insertByName(@RequestBody Dept dept) {
        return deptService.saveDept(dept);
    }
}
